# 05shuju-if判断-定义变量
age = 17
if age >= 18:
    print("进入网吧上网~~~~")
print("猜猜我什么时候执行？")
# 结论：
# if条件成立执行内部代码，否则不执行if内部代码，默认按照代码顺序向下执行


# 02-if和else判断
age = int(input("请输入您的年龄："))
# 判断年龄
if age >= 18:
    print("xxx网吧，欢迎您！")
else:
    print("未成年不允许上网！")
# 结论：
# if 和 else 成对出现时需要对齐，else不能单独使用
# if 后面有条件 else 后面直接冒号，if 和 else 内部代码必须有缩进

# 03-逻辑运算符
# and
# age = 18
# # if  0 < age < 100:
# if age > 0 and age < 100:
#     print("输入正确")
# else:
#     print("输入错误")

# or
# # 1.定义变量
# python_score = 80
# c_score = 30
# if python_score >= 60 or c_score >= 60:
#     print("成绩合格")

# not
age = 19
if not (age < 18):
    print("已成年")
else:
    print("未成年")

# not 构成条件
# 定义变量(True表示本公司员工)
# 定义变量
employer = True  # 假设已经固定值
# if not employer:
if not (employer is False):
    print("本公司员工")
else:
    print("非本公司员工")

# 04-elif的多重判断
score = int(input("请输入分数："))
if score >= 90:
    print("优")
elif 80 <= score < 90:
    print("良")
elif 70 <= score < 80:
    print("中")
elif 60 <= score < 70:
    print("差")
else:
    print("不合格")

# 05-if嵌套
has_ticket = int(input("请确认是否有票(0/非0)："))  # 0没票
if has_ticket:
    knife_length = int(input("请输入刀的长度："))
    if knife_length >= 20:
        print("不允许上车")
    else:
        print("安检通过，允许上车")
else:
    print("不允许进门")

# 06-随机数
import random

# 随机获取整数(从10~20之间随机获取一个整数)
num = random.randint(10, 20)  # 开始到结束的范围[a,b]
print(num)

# 07-游戏综合案例
# 石头剪刀布的游戏
# 分析：
# 角色：电脑、人
# 规则：石头 --> 剪刀   剪刀 --> 布  布 --> 石头
# 石头用数字1表示，剪刀用数字2表示  布用数字3表示
# 结果：人胜利、打平、人输了
# 思考：如何编写判断的条件？
# 条件1：人赢了 --> (人出1同时电脑出2) 或 （人出2同时电脑出3）或 （人出3同时电脑出1）
# 条件2：打平 --> 人出的和电脑一样
# 条件3：人输了--> 上述条件都不满足
import random

print("======游戏开始========")
# 定义变量
# 人 玩家
player = int(input("请输入您的出拳（数字1【石头】/2【剪刀】/3【布】）："))
# 电脑
computer = random.randint(1, 3)
print("电脑出拳：", computer)
# 判断
if (player == 1 and computer == 2) or (player == 2 and computer == 3) or (player == 3 and computer == 1):
    print("人赢了！！！")
elif player == computer:
    print("平局！！！")
else:
    print("人输了！！！")

# 08-while循环1
# 定义一个计数器
# while 条件:
# 满足条件需要执行的操作（循环的语句）
# 修改计数器(直到条件不满足为止)
# 输出100次，内容:"老鼠爱大米!"
num = 1
while num <= 100:
    print("老鼠爱大米!")
    num += 1  # num = num + 1

# 总结：
# 1. while后台跟条件，结果是布尔值（True/False）,当为True时循环才能执行
# 2. 循环体代码必须缩进（tab），记得修改计数器（忘了后果很严重：进入死循环）


# 09-while循环2
# while循环：实现0~100累加求和
# 分析：
# 初始的计算结果为 0
# 1.计算结果 = 0 + 1
# 2.计算结果 = 1 + 2
# 3.计算结果 = 3 + 3
# 4.计算结果 = 6 + 4
# ....
# 100.计算结果 = 上次的结果 + 100
# 推导公式：计算结果 = 上次结果 + 次数
# 设置计数器
num = 0
# 结果
result = 0
while num <= 100:
    if num % 2 == 0:
        result += num  # result = result + num
    num += 1  # num = num + 1
print(f"0~100累加求和结果：{result}")

# 10-while循环中带break
# 案例： 一共吃5个苹果， 吃完第一个， 吃第二个…， 这里"吃苹果"是重复动作
# 情况一： 如果吃的过程中， 吃完第三个吃饱了， 则不需要再吃第4个和第五个苹果，
# 即是吃苹果的动作停止(不再吃苹果)
# 定义计数器
# num = 1
# while num <= 5:
#     print(f"吃第{num}个苹果")
#     if num == 3:
#         # print("吃饱了,吃不下了")
#         break  #跳出整个循环， 当满足循环体里面的某个条件时提前结束循环
#     num += 1


# for循环
# 需求：遍历字符串"itheima"，遇到字母e退出循环
# 1.定义字符串变量
info = "itheima"
# 2.遍历取出每个元素（字符）
for i in info:
    # 条件判断（遇到字母e退出循环）
    if i == "e":
        break  # 循环体中满足某个条件时，可以提前退出循环
    # 打印取出的结果
    print(i)
# 注意
# for 循环主要用于容器内元素的遍历（遍历完成后自动结束），没有计数器的概念
# 临时变量随便定义，没有初始值，习惯用字母i
# break作用和while循环中的作用一样


# 11-range
# 案例1
# 输出10次，内容:"老鼠爱大米!"
# for循环实现
# 容器：计数10次
# for i in range(1,11): # 表示整数范围值：1,1,2,3,4,5,6,7,8,9,10
for i in range(10):  # 表示整数范围值：0,1,2,3,4,5,6,7,8,9
    print("老鼠爱大米!")

# - 取值范围遵循“顾头不顾尾”，即包含起始值，但是不包含末尾值
# - 如果起始值为0，可以省略不写，只写末尾值
# - 默认步长可以不写，默认按照1递增

# for i in range(0,10):
# for i in range(3,13):
for i in range(10):
    print(i)
    print("老鼠爱大米!")

# 案例演示
# 3.需求for循环：计算0~100之间所有偶数的累加和
# 定义接收结果变量
result = 0
# 循环遍历取数据计算
for i in range(1, 101):
    # 取出容器的数据参与计算
    if i % 2 == 0:
        result += i
# 打印最后计算结果
print(f"结果：{result}")

# 九九乘法口诀表
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{j}x{i}={i * j}", end="\t")
    print()

# 12-需求目的：破解密码
# 分析：
# 1.理想状态，一次性搞定
# 2.不理想状态：
# 2.1 一直试，直到破解为止
# 2.2 试一段时间放弃
# 规律：试错这个事没有固定次数（循环） --> 只能使用while循环
# 结论：次数不确定，可以考虑使用死循环（while后面的条件结果必须是：True），并且不修改计数器
while True:
    # 输入用户名和密码
    username = input("请输入用户名：")
    if username == "exit":
        print("退出程序！")
        break
    password = input("请输入密码：")
    # 判断
    if (username == "admin") and (password == "123456"):
        print("登录成功！")
        break
    else:
        print("用户名或密码错误，请重新输入")

#  重点-range函数🏴
#  作用：表示指定区间范围的一串整数数据集合（容器），默认按照步长为1进行递增
# - 语法格式：range(a,b[,step])  例：range(1,10,2)
#   - 相当于范围数据：a<=x<b
#   - a表示起始值，b表示末尾值
#   - step表示步长
#   - [] 表示可选
# - 注意事项：
#   - 取值范围遵循“顾头不顾尾”，即包含起始值，但是不包含末尾值
#   - 如果起始值为0，可以省略不写，只写末尾值
#   - 默认步长可以不写，默认按照1递增

result = 0
# 循环遍历取数据计算
for i in range(101):
    result += i
# 打印最后计算结果
print(f"结果：{result}")

result = 0
# 循环遍历取数据计算
for i in range(1, 101):
    result += i
# 打印最后计算结果
print(f"结果：{result}")

result = 0
# 循环遍历取数据计算
for i in range(1, 101, 2):
    result += i
# 打印最后计算结果
print(f"结果：{result}")

result = 0
# 循环遍历取数据计算
for i in range(0, 101, 2):
    result += i
# 打印最后计算结果
print(f"结果：{result}")
